package socket

import (
	"sync"

	"gddgame.cc/galaxy/utils/def"
)

//go:generate msgp

type MessageType byte

type StreamId string

var (
	msgPool = sync.Pool{New: func() interface{} {
		return &Msg{}
	}}
)

//msgp:tuple Msg
type Msg struct {
	Type    MessageType `json:"type" msg:"type"`
	Id      string      `json:"id" msg:"id"`
	Event   string      `json:"event" msg:"event"`
	Payload []byte      `json:"payload" msg:"payload"`
}

func newMsg() *Msg {
	msg := msgPool.Get().(*Msg)
	msg.Payload = nil
	msg.Event = ""
	return msg
}

func (msg *Msg) Marshal() ([]byte, error) {
	return msg.MarshalMsg(nil)
}

func (msg *Msg) Unmarshal(b []byte) error {
	_, err := msg.UnmarshalMsg(b)
	return err
}
func (msg *Msg) Copy(o def.OptimizeSerializer) {
	if b, ok := o.(*Msg); ok {
		msg.Type = b.Type
		msg.Event = b.Event
		msg.Id = b.Id
		msg.Payload = b.Payload
	}
}
func (msg *Msg) Release() {
	msgPool.Put(msg)
}
func (msg *Msg) Alloc() {

}
